/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import Model.Paciente;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;

/**
 *
 * @author Giovana
 */
public class PacienteDAO {
    //um objeto da classe Connection pode armazenar uma conexão
    Connection con;
    //A classe PreparedStatement é utilizada para enviar comandos SQL para o banco de dados
    PreparedStatement pre = null;
    ConectaBanco conectaBanco = new ConectaBanco();
    
    public void incluirPacientes(Paciente p){
        con = conectaBanco.obterConexao();
        try{
            String sql = "insert into pacientes(nome,endereco, telefone, queixa) values(?,?,?,?)";
            pre = con.prepareStatement(sql);
            // definindo que o primeiro parametro que será passado
            // ao comando SQL será inteiro, e o comando deste parametro sers o CRO
            pre.setString(1, p.getNome());
            pre.setString(2, p.getEndereco());
            pre.setString(3, p.getTelefone());
            pre.setString(4, p.getQueixa());
            System.out.println("Comando SQL formado: "+ pre);
            // o metodo executeUpdate() é utilizado quando o comando
            // SQL for utilizado para realizar alguma alteração no banco de dados,
            // caso seja somente um comando SELECT, deve-se utilizar o método executeQuery();
            pre.executeUpdate();
            JOptionPane.showMessageDialog(null, "Registro Incluído");
        }
        catch(SQLException e){
            System.out.println("Erro" + e.getMessage());
        }
    }
    
    //ExecuteUpdate - inclusao, alteração e exclusao
    //ExecuteQuery - pesquisas
    public void excluirPaciente(Paciente p){
        con = conectaBanco.obterConexao();
        try{
            String sql = "delete from pacientes where codPaciente=?";
            pre=con.prepareStatement(sql);
            pre.setInt(1, p.getCodPaciente());
            System.out.println("Comando SQL:" + pre);
            int r = pre.executeUpdate();
            if(r>0){
                JOptionPane.showMessageDialog(null, "Registro Excluído");
            }
            else{
                JOptionPane.showMessageDialog(null, "Registro não Localizado");
            }
        }catch(SQLException e){
            System.out.println("Erro" + e.getMessage());
        }        
    }
    
    public void atualizarPacientes(Paciente p){
        con = conectaBanco.obterConexao();
        try{
            //alterando os campos nome, especialidade de um registro da tabela
            //dentista conforme um CRO que foi informado
            String sql = "update pacientes set nome=?, endereco=?, telefone=?, queixa=? where codPaciente=?";
            pre = con.prepareStatement(sql);
            pre.setString(1, p.getNome());
            pre.setString(2, p.getEndereco());
            pre.setString(3, p.getTelefone());
            pre.setString(4, p.getQueixa());
            pre.setInt(5, p.getCodPaciente());
            System.out.println("Comando SQL formado: "+ pre);
            int r = pre.executeUpdate();
            if(r>0){
                JOptionPane.showMessageDialog(null, "Registro Atualizado");
            }
            else{
                JOptionPane.showMessageDialog(null, "Registro não Localizado");
            }
        }
        catch(SQLException e){
            System.out.println("Erro" + e.getMessage());
        }
    }
    //este metodo retorna um objeto ResultSet com todos os registros
    //da tabela Dentistas
    public ResultSet obterListagemPacientes(){
        PreparedStatement pre = null;
        ResultSet rs=null;
        try {
            con = conectaBanco.obterConexao();
            //selecionar todos os registros da tabela dentista. * significa
            //que serão trazidas informações referentes a todos os campos da tabela
            String sql = "select * from pacientes";
            pre=con.prepareStatement(sql);
            //como o comando SQL é um SELECT, o método a ser utilizado
            //para a execução do referido comando é o metodo executeQuery()
            rs = pre.executeQuery();
        } catch (SQLException e) {
           System.out.println("Erro" + e.getMessage());
        }
        return rs;
        
    }
    
//    //metodo main foi colocado aqui somente para fins de teste
//    public static void main (String arg[]){
//        DentistaDAO dDAO = new DentistaDAO();
//        //APOS CRIAR UM OBJETO DO TIPO DE DENTISTA, ATRIBUE-SE VALORES A ESTE
//        //OBJETO E PASSA-SE PARA UM METODO INCLUIR, ATUALIZAR OU EXCLUIR
//        Dentista d = new Dentista();
//        d.setCro(1398);
//        d.setNome("Giovana Redondo");
//        d.setEspecialidade("Proteses");
//        //dDAO.incluirDentistas(d);
//        //dDAO.excluirDentista(d);
//        //dDAO.atualizarDentistas(d);
//        
//        //a linha abaixoatribuira ao objeto rs uma listagem de registros
//        //referentes a todos os dentistas cadastrados
//        ResultSet rs = dDAO.obterListagemDentistas();
//        try{
//            //enquanto houver "proximo" registro no resultSet, estge laço
//            //faz uma iteração no resultSet, passando de um registro para 
//            //o proximo e exibindo os valores dos campos NOME e CRO.
//            while (rs.next()){
//                System.out.println("Nome: "+ rs.getString("nome"));
//            }
//        }catch (SQLException e){
//            System.out.println("Erro" + e.getMessage());
//        }
//    }
    public ResultSet pesquisarNome(String nome){
        PreparedStatement pre = null;
        ResultSet rs=null;
        try {
            con = conectaBanco.obterConexao();
           //selecionar todos os registros da tabela dentistas onde
            //o nome seja começado pelo caractere passado pelo parametro
            String sql = "select * from pacientes where nome like ?";
            pre=con.prepareStatement(sql);
            pre.setString(1, nome + '%');
            
            //como o comando SQL é um SELECT, o método a ser utilizado
            //para a execução do referido comando é o metodo executeQuery()
            rs = pre.executeQuery();
        } catch (SQLException e) {
           System.out.println("Erro" + e.getMessage());
        }
        return rs;
    }
    
}
